-- @name 多地图循环任务
-- @version 1.0.0
-- @description 自动遍历多个地图并执行停留操作
-- @require modules/map.lua
-- @require modules/movement.lua

local logger = require("utils.logger")
local ConfigLoader = require("config.loader")
local Settings = require("config.settings")
local config = ConfigLoader.load(Settings.CURRENT_GAME)
local map = require("modules.map")
local movement = require("modules.movement")
local combat = require("modules.combat")
local window = require("modules.window")

local task = {
    maps = {
        -- "九扇门1",
        -- "冰雪仙境",
        -- "混沌之地",
        -- "死亡棺材",
        -- "牛魔大厅",
        -- "封魔神殿",
          "死亡棺材",
        "沙藏宝阁",
        "幻境八层",
      
    },
    next_hunt_time = 0,   -- 停留时间10分钟
    retry_interval = 5000 -- 失败重试间隔
}

function task.run()
    logger.info("启动多地图循环任务")

    while true do
        if task.next_hunt_time ~= 0 and task.next_hunt_time > os.time() then
            logger.info("等待下一轮地图遍历")
            mSleep(10000) -- 等待10秒
        else
            for _, map_name in ipairs(task.maps) do
                local success = false
                local retry_count = 0

                -- 带重试机制的进图逻辑
                while not success and retry_count < 3 do
                    logger.info(string.format("尝试进入%s（第%d次）", map_name, retry_count + 1))
                    window.closeOtherWindow()
                    while not movement.isInMZ() do
                        movement.useTownStone()
                        mSleep(2000)
                    end

                    if map.enterMapByPoint(map_name) then
                        logger.info(string.format("成功进入%s", map_name))
                        -- 根据配置读取bs的坐标
                        local map_cfg = config.BOSS_MAPS[map_name]

                        if not map_cfg then
                            logger.error(string.format("%s未配置地图信息", map_name))
                            success = true
                            break
                        end

                        -- 是否配置了boss坐标，如果没有配置则在地图默认刷20分钟
                        if not map_cfg.BOSS_POSITIONS then
                            if map_cfg.BOSS_TIME then
                                logger.info(string.format("%s未配置boss坐标，默认刷%d分钟", map_name, map_cfg.BOSS_TIME))
                                mSleep(map_cfg.BOSS_TIME * 60 * 1000) -- 转换为毫秒
                            else
                                logger.warn(string.format("%s未配置boss坐标，默认刷20分钟", map_name))
                                mSleep(20 * 60 * 1000) -- 20分钟 1200
                            end
                            success = true
                            break
                        end

                        -- 遍历bs的坐标
                        for _, pos in ipairs(map_cfg.BOSS_POSITIONS) do
                            -- 查看bs是否已被击杀，添加最多20此循环
                            local retry_count1 = 0
                            local isFly = false
                            -- 最多攻击10分钟获取时间
                            local kill_time = os.time() + 600
                            while not map.isBsDeadPicPosition(pos[1], pos[2]) and retry_count1 < 5 and kill_time > os.time() do
                                -- 飞到bs并击杀
                                if isFly or map.findBsAndFly(pos[1], pos[2]) then
                                    isFly = true
                                    logger.info(string.format("点击坐标：%d, %d", pos[1], pos[2]))
                                    -- 等待
                                    mSleep(5000)
                                else
                                    retry_count1 = retry_count1 + 1
                                    mSleep(2000)
                                    logger.warn(string.format("未移动到坐标：%d, %d", pos[1], pos[2]))
                                end
                            end
                            -- 记录击杀时间  90分钟后再次执行
                            task.next_hunt_time = os.time() + 600 * 9 -- 90分钟后再次执行
                            success = true
                        end
                    else
                        retry_count = retry_count + 1
                        logger.warn("进入地图失败，等待重试")
                        mSleep(task.retry_interval)
                    end
                end

                if not success then
                    logger.error(string.format("%s进入失败超过最大重试次数", map_name))
                end
            end
            logger.info("本轮地图遍历完成，开始下一轮")
        end
    end
end

return task
